from rest_framework import serializers
from home.models import NavCategory, CourseCategory, Image


class NavCategorySerializer(serializers.ModelSerializer):

    class Meta:
        model = NavCategory
        # 这里的序列化字段只用写需要展示的字段即可，继承的不需要展示
        fields = ['id','name','display_name','weight','link']




class BehindCategorySerializer(serializers.ModelSerializer):

    children = serializers.SerializerMethodField()

    class Meta:
        model = CourseCategory
        fields = ['id','name','level','description','children']
        # 为什么这里展示(序列化)的是children字段呢？
        # 因为children是你自定义的序列化字段，他重写了展示方法，这是展示二级及三级的分类名称

    def get_children(self,obj):
        # obj就指代当前的BehindCategory对象模型
        # 序列化后再次进行筛选过滤，筛选出有二级及三级分类的 分类
        queryset = CourseCategory.objects.filter(parent=obj)
        # parent这个字段就是代表父级分类也就是一级，意思是你有一级分类，我再筛选你下面第二级和三级
        if queryset:
            # 如果有一级分类，那我序列化你的二三级可以进行展示
            serializer = BehindCategorySerializer(queryset,many=True)
            # 因为是多条数据，所以是many=True
            return serializer.data  # 记得返回数据给前面
        else:
            return []   # 没有就返回空列表




class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Image
        fields = ['id','title','image','link','description']

